package com.superbytecode.stencil.strategy;

import com.superbytecode.stencil.enums.DatabaseTypeEnum;
import com.superbytecode.stencil.enums.SQLTypeEnum;
import lombok.experimental.UtilityClass;

/**
 * All rights Reserved, Designed By www.super-master.com
 *
 * @ProjectName: magician
 * @Package: com.superbytecode.magician.strategy
 * @ClassName: SQLStrategyFactory
 * @Description: []
 * <p> </p>
 * @Author: [Lance Ting]
 * @Date: 2024/10/10 16:08
 * @Version: V1.0
 * @Copyright: 2024 www.super-master.cn Inc. All rights reserved.
 * TODO: 注意,本文件Lance Ting所作,如果转载或使用请标明具体出处!
 **/
@UtilityClass
public class SQLStrategyFactory {

    public SQLScriptStrategy buildScript(String code) {
        return SQLStrategyEnum.ofScriptStrategy(code);
    }

    /**
     * 获取sql通用类型
     * <p>不同类型/不同版本数据库，存在差异性</p>
     *
     * @param databaseType    数据库类型
     * @param databaseVersion 数据库版本
     * @param originalType    sql数据类型
     * @return 对应数据库以及版本的数据类型
     */
    @SuppressWarnings("all")
    public String ofSQLGenericType(final String databaseType, final String databaseVersion, final String originalType) {
        // 根据数据库类别和版本
        DatabaseTypeEnum.of(databaseType, databaseVersion).getCategoryCode();
        return ofSQLGenericType(originalType);
    }

    /**
     * 获取sql通用类型
     *
     * @param originalType sql数据类型
     * @return 对应数据库以及版本的数据类型
     */
    public String ofSQLGenericType(final String originalType) {
        return SQLTypeEnum.ofGenericType(originalType);
    }
}